package co.yixiang.mall.biz.user.service;

import co.yixiang.common.mproot.common.service.BaseService;
import co.yixiang.mall.biz.user.mapper.UserMapper;
import co.yixiang.mall.common.mall.domain.YxUser;
import co.yixiang.mall.common.mall.dto.YxMemberRankingQueryCriteria;
import co.yixiang.mall.common.mall.dto.YxUserQueryCriteria;
import com.github.pagehelper.PageInfo;
import org.springframework.data.domain.Pageable;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface YxMemberService  extends BaseService<YxUser> {

    /**
     * 导出Excel 排行榜数据
     * @param qc
     * @param response
     */
    void download(YxMemberRankingQueryCriteria qc, HttpServletResponse response) ;


    PageInfo<YxUser> queryMember(YxMemberRankingQueryCriteria qc);


    /**
     * 修改用户的上级
     * @param userUid 修改目标用户的id
     * @param superiorUid 用户的目标上级
     * @return 返回true 成功 false失败
     */
    boolean updateSuperior(Long userUid,Long superiorUid);


    /**
     * 封装累计下级数量
     * @param map 当前用户所在组中所有数据
     * @param uid 当前用户 数据
     * @return
     */
    Integer queryNumber(Map<Long,List<Long>> map, Long uid);

    /**
     * 通过组字段 查询这个组的数据
     * @param userId 用户id
     * @return
     */
    Map<Long,YxUser> getGrouping(Long userId);

    /**
     * 获取用户的下级id
     * @param map 用户所在分组的所有数据
     * @param user 用户的id
     * @return
     */
    List<YxUser> getUnderLevel(Map<Integer,List<YxUser>> map,YxUser user);


    /**
     * 获取用户自己的数据和下级人数
     *
     * @param uid 这个用户的id
     * @param status 是查询用户自己的数据还是，他的下级数据
     * @return
     */
    List<Map<String,String>> getOneself(Long uid,String status);
}
